package tech.lq0.dreamaticvoyage.init;

import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import tech.lq0.dreamaticvoyage.Utils;
import tech.lq0.dreamaticvoyage.block.entity.*;

public class BlockEntityRegistry {

    public static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, Utils.MOD_ID);

    public static final RegistryObject<BlockEntityType<PointsStoreBlockEntity>> POINTS_STORE_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("points_store_block_entity",
                    () -> BlockEntityType.Builder.of(PointsStoreBlockEntity::new, BlockRegistry.POINTS_STORE.get()).build(null));
    public static final RegistryObject<BlockEntityType<PhantasmalVoyagerBlockEntity>> PHANTASMAL_VOYAGER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("phantasmal_voyager_block_entity",
                    () -> BlockEntityType.Builder.of(PhantasmalVoyagerBlockEntity::new, BlockRegistry.PHANTASMAL_VOYAGER.get()).build(null));
    public static final RegistryObject<BlockEntityType<VerdantSpiritFarmlandBlockEntity>> VERDANT_SPIRIT_FARMLAND_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("verdant_spirit_farmland_block_entity",
                    () -> BlockEntityType.Builder.of(VerdantSpiritFarmlandBlockEntity::new, BlockRegistry.VERDANT_SPIRIT_FARMLAND.get()).build(null));

    public static final RegistryObject<BlockEntityType<CrystalPopperBlockEntity>> CRYSTAL_POPPER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("crystal_popper_block_entity",
                    () -> BlockEntityType.Builder.of(CrystalPopperBlockEntity::new, BlockRegistry.CRYSTAL_POPPER.get()).build(null));
    public static final RegistryObject<BlockEntityType<CrystalPurifierBlockEntity>> CRYSTAL_PURIFIER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("crystal_purifier_block_entity",
                    () -> BlockEntityType.Builder.of(CrystalPurifierBlockEntity::new, BlockRegistry.CRYSTAL_PURIFIER.get()).build(null));
    public static final RegistryObject<BlockEntityType<CrystalCutterBlockEntity>> CRYSTAL_CUTTER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("crystal_cutter_block_entity",
                    () -> BlockEntityType.Builder.of(CrystalCutterBlockEntity::new, BlockRegistry.CRYSTAL_CUTTER.get()).build(null));

    public static final RegistryObject<BlockEntityType<FukamizuCompressorBlockEntity>> FUKAMIZU_COMPRESSOR_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_compressor_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuCompressorBlockEntity::new, BlockRegistry.FUKAMIZU_COMPRESSOR.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuPylonBlockEntity>> FUKAMIZU_PYLON_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_pylon_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuPylonBlockEntity::new, BlockRegistry.FUKAMIZU_PYLON.get()).build(null));
    public static final RegistryObject<BlockEntityType<LightBreadEnergyBlockEntity>> LIGHT_BREAD_ENERGY_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("light_bread_energy_block_entity",
                    () -> BlockEntityType.Builder.of(LightBreadEnergyBlockEntity::new, BlockRegistry.LIGHT_BREAD_ENERGY_BLOCK.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuCrusherBlockEntity>> FUKAMIZU_CRUSHER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_crusher_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuCrusherBlockEntity::new, BlockRegistry.FUKAMIZU_CRUSHER.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuBreadFurnaceBlockEntity>> FUKAMIZU_BREAD_FURNACE_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_bread_furnace_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuBreadFurnaceBlockEntity::new, BlockRegistry.FUKAMIZU_BREAD_FURNACE.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuReactionChamberBlockEntity>> FUKAMIZU_REACTION_CHAMBER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_reaction_chamber_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuReactionChamberBlockEntity::new, BlockRegistry.FUKAMIZU_REACTION_CHAMBER.get()).build(null));

    public static final RegistryObject<BlockEntityType<FukamizuTurbineEngineBlockEntity>> FUKAMIZU_TURBINE_ENGINE_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_turbine_engine_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuTurbineEngineBlockEntity::new, BlockRegistry.FUKAMIZU_TURBINE_ENGINE.get()).build(null));
    public static final RegistryObject<BlockEntityType<UmisuPylonBlockEntity>> UMISU_PYLON_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("umisu_pylon_block_entity",
                    () -> BlockEntityType.Builder.of(UmisuPylonBlockEntity::new, BlockRegistry.UMISU_PYLON.get()).build(null));
    public static final RegistryObject<BlockEntityType<MoltenBreadEnergyBlockEntity>> MOLTEN_BREAD_ENERGY_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("molten_bread_energy_block_entity",
                    () -> BlockEntityType.Builder.of(MoltenBreadEnergyBlockEntity::new, BlockRegistry.MOLTEN_BREAD_ENERGY_BLOCK.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuPunchBlockEntity>> FUKAMIZU_PUNCH_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_punch_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuPunchBlockEntity::new, BlockRegistry.FUKAMIZU_PUNCH.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuFermenterBlockEntity>> FUKAMIZU_FERMENTER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_fermenter_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuFermenterBlockEntity::new, BlockRegistry.FUKAMIZU_FERMENTER.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuExtractionMachineBlockEntity>> FUKAMIZU_EXTRACTION_MACHINE_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_extraction_machine_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuExtractionMachineBlockEntity::new, BlockRegistry.FUKAMIZU_EXTRACTION_MACHINE.get()).build(null));
    public static final RegistryObject<BlockEntityType<FukamizuBoosterBlockEntity>> FUKAMIZU_BOOSTER_BLOCK_ENTITY =
            BLOCK_ENTITY_TYPES.register("fukamizu_booster_block_entity",
                    () -> BlockEntityType.Builder.of(FukamizuBoosterBlockEntity::new, BlockRegistry.FUKAMIZU_BOOSTER.get()).build(null));
}
